package main

import (
	"fmt"
	"strings"
)

/*
	拼写单词
给你一份『词汇表』（字符串数组） words 和一张『字母表』（字符串） chars。
假如你可以用 chars 中的『字母』（字符）拼写出 words 中的某个『单词』（字符串），那么我们就认为你掌握了这个单词。
注意：每次拼写（指拼写词汇表中的一个单词）时，chars 中的每个字母都只能用一次。
返回词汇表 words 中你掌握的所有单词的 长度之和。

示例 1：
输入：words = ["cat","bt","hat","tree"], chars = "atach"
输出：6
解释：可以形成字符串 "cat" 和 "hat"，所以答案是 3 + 3 = 6。
*/
func countCharacters(words []string, chars string) int {
	// chars中的只能用一次
	var wholeLength int = 0
outloop:
	for _, v1 := range words {
		// 拿每一个单词。
		for _, v2 := range v1 {
			// 取字母
			if strings.Count(v1, string(v2)) > strings.Count(chars, string(v2)) {
				// 如果在单词中某个字母的数量大于词库中的数量，说明弄不了。
				continue outloop
			}
		}
		// 如果这个循环走完了，能走到这里，说明这个单词里的字母都在chars中
		wholeLength += len(v1)
	}
	return wholeLength
}

func main() {
	fmt.Println(countCharacters([]string{"cat","bt","hat","tree"}, "atach"))
}
